/**
 * axios
 */
import axios from 'axios';

// 引入qs 处理前后端分离项目 post请求返回数据多了一层data对象
import qs from 'qs';

// 自己的项目 引入的store仓库 根据自己按需引入
import store from '@/store';

// 自己项目中的工具类文件  根据自己按需引入
import {util} from '@/utils';

/**
*   这里说明一下 运行环境 一般正常项目环境会有
*   1、开发 development
*   2、测试 test
*   3、 生产环境 production
*   vue-cli3 可以自行配置对应的环境配置文件 对应可看
*    https://cli.vuejs.org/zh/guide/mode-and-env.html
*/

// 运行环境
const env = process.env.NODE_ENV === 'production' && process.env.VUE_APP_MODE === 'production' ?
    'production' :
    process.env.VUE_APP_MODE === 'test' ? 'test' :
    'development';

// 线上测试环境 && 线上正式环境
const baseURL = env === 'production' ? 'http://production.xxx.com' : env==='test'?'http:test.xxx.com':'http:development.xxx.com';

// 本地开发环境(本地mock数据 需要配置node作为服务)
// const baseURL = 'http://localhost:3001/mock'
// 创建实例
const instance = axios.create({
    baseURL,
    timeout: 30000
});

// 发送请求允许携带 cookie
instance.defaults.withCredentials = true;
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

// 请求拦截
instance.interceptors.request.use(config => {
    // 格式化Post数据
    if (config.method == 'post') {
        config.data = qs.stringify(config.data);
    }
    return config
}, error => {
    util.error('服务器错误!!!');
    return Promise.reject(error);
})

// 响应拦截
instance.interceptors.response.use(response => {

    // 响应的数据中 后台把数据放到data对象中 所以用解构赋值  这里也得和后台做统一返回数据格式
    let {data} = response;
    
    // 响应的状态码 和后台做好开发前的 对接
    if (response.status == 500) {
        util.error('服务器开小差了,请稍后再试');
    } else if (data.code == 1001 || data.code == 1002) { // 其他状态码
        // 其他状态码的处理 逻辑
        ***
        ***
        ***
    } else if (data.code != 0) { // 非0则提示错误信息
        util.error(data.message);
    }
    return data;
}, error => {
    // 请求超时处理
    if (error.toString().search('timeout')) {
        util.error('请求超时!');
    }
    return Promise.reject(error);
});

export default instance;

// 然后在需要用到请求的地方引入该文件就可以了
vue-cli3 环境变量和模式

不摇碧莲
4 声望0 粉丝

临渊羡鱼,不如退而结网!


下一篇 »
React路由动画